package com.bawei.base

import android.app.Application
import com.alibaba.android.arouter.launcher.ARouter
import com.tencent.mmkv.BuildConfig
import com.tencent.mmkv.MMKV
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import java.util.concurrent.Executors

/**
 * Author: Jason Zhang
 * Date: 2025/1/9
 * Desc: 基础APP
 */
open class BaseApplication : Application(){


    companion object{
        lateinit var appContext: BaseApplication
    }

    /**
     * APP应用启动分为：
     * 冷启动：之前APP没有启动过，也就是application中的onCreate()方法没有执行
     * 热启动：之前APP启动过，在后台近期应用列表中可以找到，同Activity栈中也在
     * 温启动：之前APP启动过，Activity重新创建，执行Activity的onCreate()方法
     */

    override fun onCreate() {
        super.onCreate()
        appContext = this

        //MMKV初始化
        MMKV.initialize(this)

        //ARouter
        if (BuildConfig.DEBUG){
            ARouter.openLog()
            ARouter.openDebug()
        }
        ARouter.init(this)

        //开启协程，初始化SDK
//        asyncInit(appContext)

    }


    /**
     * 启动优化（加快应用启动时间）
     * 1.解决白屏（修改窗口背景样式）
     * 2.把耗时初始化放到子线程中，或线程池中，或后台Service中
     * 3.延迟初始化，可以放到页面启动后来进行
     * 4.启动第一个Activity时不能有耗时操作
     * 5.Activity的页面不能过于复杂或者层级不能过深
     */


    private fun asyncInit(appContext: Application){
        //创建协程作用域对象
        runBlocking{
            var dispatcher = Executors.newFixedThreadPool(1).asCoroutineDispatcher()
            var taskJob = launch(dispatcher) {
                try {

                } catch (e: Exception){
                    e.printStackTrace()
                } finally {
                    cancel() //最终都需要需求协程，释放资源
                }
            }
        }
    }



}